package com.yunfei.commonbase.hdutil;

import org.springframework.util.FileCopyUtils;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Logger;

public class CephUtil {
    private static final Logger logger = Logger.getLogger(CephUtil.class.toString());




    public static void download(String url, HttpServletResponse res){
        File file = new File(url);
        res.setHeader("content-type", "application/octet-stream");
        res.setContentType("application/octet-stream");
        res.setHeader("Content-Disposition", "attachment;filename=" + new String(file.getName().getBytes(), StandardCharsets.UTF_8));
        byte[] buff = new byte[1024];
        BufferedInputStream bis = null;
        OutputStream os;
        try {
            os = res.getOutputStream();
            bis = new BufferedInputStream(new FileInputStream(file));
            int i = bis.read(buff);
            while (i != -1) {
                os.write(buff, 0, buff.length);
                os.flush();
                i = bis.read(buff);
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (bis != null) {
                try {
                    bis.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }

    /**
     * ceph上传文件
     * @param file
     * @return
     */
    public static String uploaddoc(MultipartFile file, String url){
        if (file.isEmpty()) {
            throw new RuntimeException("请上传文件");
        }
        String fileName = file.getOriginalFilename();
        //创建输入输出流
        InputStream inputStream = null;
        OutputStream outputStream = null;

        try {
            //获取文件的输入流
            inputStream = file.getInputStream();
            //获取上传时的文件名
            //注意是路径+文件名
            File targetFile = new File(url + fileName);
            //如果之前的 String path = "d:/upload/" 没有在最后加 / ，那就要在 path 后面 + "/"

            //判断文件父目录是否存在
            if(!targetFile.getParentFile().exists()){
                //不存在就创建一个
                targetFile.getParentFile().mkdir();
            }

            //获取文件的输出流
            outputStream = new FileOutputStream(targetFile);
            //最后使用资源访问器FileCopyUtils的copy方法拷贝文件
            FileCopyUtils.copy(inputStream, outputStream);
            logger.info("上传成功");
        } catch (IOException e) {
            logger.info("上传失败");
            e.printStackTrace();
            throw new RuntimeException("上传失败");
        } finally {
            //无论成功与否，都有关闭输入输出流
            if (inputStream != null) {
                try {
                    inputStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (outputStream != null) {
                try {
                    outputStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        return url+fileName;
    }



    /**
     * 递归删除文件或文件夹
     *
     * @param file  文件或文件夹
     */
    public static void delFile(File file) {
        if (!file.exists()) {
            return;
        }

        if (file.isFile()){
            // 文件: 直接删除
            file.delete();
        } else if (file.isDirectory()) {
            // 文件夹
            // 1. 删除子文件
            for (File f: file.listFiles()){
                delFile(f);
            }
            // 2. 删除文件夹
            file.delete();
        }

    }


    public static void main(String[] args) {
        String url = "D:\\资料\\个人资料\\学习资料";
        List<File> files = new ArrayList<>();
        readFile(url,files);
        for (File f1 : files) {
            System.out.println(f1.getAbsolutePath());
        }
    }

    public static void readFile(String fileDir,List<File> fileList) {
        File file = new File(fileDir);
        File[] files = file.listFiles();// 获取目录下的所有文件或文件夹
        if (files == null) {// 如果目录为空，直接退出
            return;
        }

        //  遍历，目录下的所有文件
        for (File f : files) {
            if (f.isFile()) {
                fileList.add(f);
            } else if (f.isDirectory()) {
//                System.out.println(f.getAbsolutePath());
                readFile(f.getAbsolutePath(),fileList);
            }
        }
    }
}
